//
//  Download.m
//  DowloadDemo
//
//  Created by xalo on 16/6/17.
//  Copyright © 2016年 蓝鸥科技有限公司西安分公司. All rights reserved.
//

#import "Download.h"
@interface Download ()<NSURLSessionDownloadDelegate>
@property (nonatomic,strong)NSURLSession *session;
// 下载任务
@property (nonatomic,strong)NSURLSessionDownloadTask *task;
// 正在下载
@property (nonatomic,copy)Downloading downloading;
// 下载完成
@property (nonatomic,copy)Complted complted;
@end


@implementation Download

- (NSURLSession *)session {
    if (!_session) {
        _session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:nil];
    }
    return _session;
}

// 自定义init方法，在初始化的时候就去创建一个下载任务
- (instancetype)initWithUrl:(NSString *)url
{
    self = [super init];
    if (self) {
        
        // 创建一个下载任务
        self.task = [self.session downloadTaskWithURL:[NSURL URLWithString:url]];
        
    }
    return self;
}

// 开始下载
- (void)startDownload {
    
    [self.task resume];
}

// 暂停下载
- (void)stopDownload {
    
    [self.task suspend];
}

// 正在下载
/**
 *  @param session
 *  @param downloadTask
 *  @param bytesWritten              这次下载多少
 *  @param totalBytesWritten         已经下载多少
 *  @param totalBytesExpectedToWrite 总共下载多少
 */
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite {
    
 //   NSLog(@"%f%%",(totalBytesWritten/(float)totalBytesExpectedToWrite)*100);
    if (self.downloading) {
        
        self.downloading(bytesWritten,(totalBytesWritten/(float)totalBytesExpectedToWrite)*100);
    }
    
}

// 下载完成
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location {
    
    // 我们要存放下载文件的路径
    NSString *filePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject;
    // 拼接文件的名字,名字是从服务器上获取下来的 (服务器建议我们使用的名字)
    NSString *fileName = downloadTask.response.suggestedFilename;
    filePath = [filePath stringByAppendingPathComponent:fileName];
    // 文件管理器，把临时的文件移动到缓存文件夹下
    [[NSFileManager defaultManager] moveItemAtPath:location.path toPath:filePath error:nil];
    if (self.complted) {
        
        self.complted(filePath,@"网址");
    }
   
}

// 下载的时候和下载完成会走其中的Block方法
- (void)downloading:(Downloading)downloading didFinished:(Complted)complited {
    
    self.downloading = downloading;
    self.complted = complited;
    
}



@end
